package mode.design_mode_08_response_chain;



/**
 * ***********************************************************
 *
 * @类名 : controller.design_mode_08_response_chain.类名
 * @DESCRIPTION : 抽象处理者，责任链也用到了模板方法模式
 * @AUTHOR :  一个风情万种的男子
 * @DATE : 2016/4/20
 * ***********************************************************
 */
public abstract class Handler {
    private Handler nextHandler;
    //每个处理者都必须对请求做出处理
    public final MyResponse handleMessage(MyRequest request){
        MyResponse response = null ;
        //判定是否是自己的处理级别
        if(this.getHandlerLevel().name().equals(request.getRequestNextLevel().name())){
            response = this.echo(request);
        }else {
            //不属于自己的处理级别，判断是否有下一个处理者
            if(this.nextHandler !=null){
                response = this.nextHandler.handleMessage(request);
            }else {
                //没有合适的处理者，业务自行处理
            }
        }
        return response;

    }

    /**
     * 输出处理的结果response
     * @param request
     * @return
     */
    protected abstract MyResponse echo(MyRequest request);

    /**
     * 设置下一个处理者是谁
     * @param nextHandler
     */
    public void setNextHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }

    /**
     * 得到本次处理的级别
     * @return
     */
    protected abstract MyLevel getHandlerLevel();

}
